"""
第三方包 gevent，比greenlet要智能一些
pip install gevent
greenlet实现了协程，但是它需要人工切换，不太智能
gevent原理是当一个greenlet遇到io，访问网络等耗时操作时候会自动切换到其它的greenlet，等到io完成，
再适当的时候切换回来继续执行


gevent 中的monkey：猴子补丁
    由于代码里面的time.sleep对gevent来说并不知道是耗时操作，
    monkey.patch_all就是把这些time.sleep替换成让gevent能够感知的耗时操作
"""
import time

import gevent
from gevent import monkey

monkey.patch_all()


def a():
    for i in range(5):
        print('A:', str(i))
        time.sleep(0.1)


def b():
    for i in range(5):
        print('B:', str(i))
        time.sleep(0.1)


def c():
    for i in range(5):
        print('C:', str(i))
        time.sleep(0.1)


if __name__ == '__main__':
    ga = gevent.spawn(a)
    gb = gevent.spawn(b)
    gc = gevent.spawn(c)
    ga.join()
    gb.join()
    gc.join()
